home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
asm
/
pack
/
xpklibs
/
xpk_pack.s
next >
Wrap
Text File
|
1980-01-03
|
2KB
|
87 lines
incdir _include:
include exec/exec.i
include libraries/dos_lib.i
include libraries/exec_lib.i
include libraries/dosextens.i
include include:libraries/xpk.i
start: move.l 4.w,a6
lea xpkname(pc),a1
jsr _LVOOldOpenLibrary(a6)
move.l d0,xpkbase ; Store XPK Library base!
beq.b cleanup ; ERROR -> Exit
move.l d0,a6 ; XPKBase to A6
lea tags(pc),a0
jsr _LVOXpkPack(a6)
tst.l d0
beq.w noerror
move.w #$ff0,$dff180
noerror
cleanup move.l xpkbase(pc),d0
beq.b exit ; Library not open
move.l d0,a1
move.l 4.w,a6
jsr _LVOCloseLibrary(a6) ; Close XPK library
exit moveq #0,d0 ; No error code!
lea dst,a0
move.l 4(a0),d0 ; packed size
move.l #srclen,d1
move.l d1,d2 ;d1=original size..
sub.l d0,d2
move.l d1,d3
getgain1: tst.l d2
bmi.s getgain2
tst.l d3
bmi.s getgain2
add.l d2,d2
add.l d3,d3
bra.s getgain1
getgain2: lsr.l #1,d2
lsr.l #1,d3
clr.w d2
clr.w d3
swap d2
swap d3
mulu #100,d2
divu d3,d2
;-------------- d2.w = % gain
; d0.l = new size
; d1.l = old size
lea errbuf(pc),a0
lea dst+48,a1
lea -48(a1,d0.l),a2
rts
xpkbase: dc.l 1
tags: dc.l XPK_InBuf,src
dc.l XPK_InLen,srclen
dc.l XPK_OutBuf,dst
dc.l XPK_OutBufLen,(srclen)+(srclen/2)
dc.l XPK_FindMethod,packmode
dc.l XPK_PackMode,packmode
dc.l XPK_GetError,errbuf ; A pointer to the error message buffer
dc.l TAG_DONE
errbuf: ds.b 82
even
packmode: dc.b 'CRM2',0
even
xpkname: dc.b 'xpkmaster.library',0
even
src: incbin 'dl:68khelper/mod.bonus'
srcend even
srclen = srcend-src
dst: ds.b 10240*2
end